
package com.hlkj.pay.app.ad.impl;
/*
 * Hlpay-Plus aggregate payment system.
 * Copyright (c) 2024-2025 Hlpay Team Copyright has the right of final interpretation.
 */

import java.util.List;

import org.springframework.stereotype.Service;

import com.hlkj.framework.common.pojo.CommonResult;
import com.hlkj.framework.common.util.collection.CollectionUtils;
import com.hlkj.framework.common.util.json.JsonUtils;
import com.hlkj.pay.app.ad.IAdMediaAppService;
import com.hlkj.pay.common.AdResultCode;
import com.hlkj.pay.common.CommonResultCode;
import com.hlkj.pay.dto.ad.query.AdMediaQueryDto;
import com.hlkj.pay.infrastructure.model.ad.AdMediaDO;
import com.hlkj.pay.service.ad.IAdMediaService;
import com.hlkj.pay.vo.ad.req.AdMediaReq;

import cn.hutool.core.bean.BeanUtil;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;

/**
 * @author HlpayTeam
 * @date 2024/10/23 9:12
 */
@Slf4j
@Service
@RequiredArgsConstructor
public class AdMediaAppServiceImpl implements IAdMediaAppService {

    private final IAdMediaService adMediaService;

    @Override
    public CommonResult<Void> saveAdMedia(AdMediaReq adMediaReq) {
        log.info("saveAdMedia adMediaReq:{}", JsonUtils.toJsonString(adMediaReq));
        try {
            AdMediaQueryDto adMediaQueryDto = new AdMediaQueryDto();
            adMediaQueryDto.setName(adMediaReq.getName());
            List<AdMediaDO> mediaList = adMediaService.queryList(adMediaQueryDto);
            if (!CollectionUtils.isEmpty(mediaList)) {
                return CommonResult.error(AdResultCode.AD_MEDIA_EXITS);
            }
            AdMediaDO adMediaDO = BeanUtil.copyProperties(adMediaReq, AdMediaDO.class);
            adMediaService.saveAdMedia(adMediaDO);
            return CommonResult.success();
        }
        catch (Exception e) {
            log.error("saveAd error:{}", e.getMessage());
            return CommonResult.error(CommonResultCode.SERVICE_ERROR);
        }
    }

    @Override
    public CommonResult<Void> updateAdMedia(AdMediaReq adMediaReq) {
        log.info("updateAdMedia adMediaReq:{}", JsonUtils.toJsonString(adMediaReq));
        try {
            if (adMediaReq.getId() == null) {
                return CommonResult.error(CommonResultCode.PARAMETER_MISSING);
            }
            AdMediaDO mediaDb = adMediaService.queryById(adMediaReq.getId());
            if (mediaDb == null) {
                return CommonResult.error(AdResultCode.AD_MEDIA_NOT_EXITS);
            }
            
            AdMediaQueryDto adMediaQueryDto = new AdMediaQueryDto();
            adMediaQueryDto.setName(adMediaReq.getName());
            List<AdMediaDO> mediaList = adMediaService.queryList(adMediaQueryDto);
            if (!CollectionUtils.isEmpty(mediaList)) {
                AdMediaDO adMediaDO = mediaList.get(0);
                if (!adMediaDO.getId().equals(adMediaReq.getId())) {
                    return CommonResult.error(AdResultCode.AD_MEDIA_EXITS);
                }
            }
            AdMediaDO adMediaDO = BeanUtil.copyProperties(adMediaReq, AdMediaDO.class);
            adMediaService.updateAdMedia(adMediaDO);
            return CommonResult.success();
        }
        catch (Exception e) {
            log.error("updateAdMedia error:{}", e.getMessage());
            return CommonResult.error(CommonResultCode.SERVICE_ERROR);
        }
    }

    @Override
    public CommonResult<Void> delAdMedia(Long id) {
        log.info("delAdMedia id:{}", id);
        try {
            if (id == null) {
                return CommonResult.error(CommonResultCode.PARAMETER_MISSING);
            }
            AdMediaDO mediaDb = adMediaService.queryById(id);
            if (mediaDb == null) {
                return CommonResult.error(AdResultCode.AD_MEDIA_NOT_EXITS);
            }
            adMediaService.delAdMedia(id);
            return CommonResult.success();
        }
        catch (Exception e) {
            log.error("delAdMedia error:{}", e.getMessage());
            return CommonResult.error(CommonResultCode.SERVICE_ERROR);
        }
    }
}
